import urllib.request
import time
import re
import json
import pymysql

currentTime=time.strftime("%Y%m%d%H%M%S", time.localtime());

# 打开数据库连接
db = pymysql.connect("192.168.20.174","root","123456","meituan")

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()

class Spider:

    def loadPage(self,page,pid):

        print (time.strftime("%Y%m%d%H%M%S", time.localtime()))

        url = "http://cd.meituan.com/meishi/b24737/pn"+str(page)+"/"

        #user-Agent头
        user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
        headers = {"User-Agent":user_agent}
        req = urllib.request.Request(url,headers = headers)
        response = urllib.request.urlopen(req)
        html =str(response.read(),'utf-8')


        #找到商家信息的内容为：{"poiId":xxx}
        #re.S 如果没有re.S,则是只匹配一行有没有符合规则的字符串，如果没有则匹配下一行重新匹配
        #如果加上re.S,则是将所有的字符串按一个整体进行匹配

        pattern = re.compile(r'{"poiId":.*?}',re.S)
        item_list = pattern.findall(html)#获取数据


        #dictinfo = json.loads(item_list[0])#把字符串转化为字典

        list = []#存放数据的数组

        for data in item_list:

            dictinfo = json.loads(data)

            dtlUrl="https://www.meituan.com/meishi/"+str(dictinfo["poiId"])

            dictinfo['url']=dtlUrl;
            print(dictinfo)
            #添加数据到MysqlDB
            mySpider.saveDateToMysql(dictinfo,pid);


    #保存数据到mysql数据库
    def saveDateToMysql(self,dictinfo,pid):
        try:
            # SQL 插入语句
            sql1 = "INSERT INTO meituan_shop_scrapy_dtl (pid,poi_id,title,avg_score,address,avg_price,front_img,link_url,all_comment_num) \
               VALUES(%s,%s,'%s',%s,'%s',%s,'%s','%s',%s)" % \
              (pid,dictinfo["poiId"], dictinfo["title"], dictinfo["avgScore"],dictinfo["address"], dictinfo["avgPrice"],dictinfo["frontImg"],dictinfo["url"],dictinfo["allCommentNum"])
            cursor.execute(sql1)
            # 执行sql语句
            db.commit()
        except:
            # 发生错误时回滚
            db.rollback()


if __name__ == "__main__":
    mySpider = Spider()
    #插入主表数据
    sql0="INSERT INTO meituan_shop_scrapy (scrapy_time,scrapy_name) VALUES (now(), '美团商家信息爬虫')"
    # 执行sql语句
    cursor.execute(sql0)
    for i in range(1,20):
        print("fecth:Page"+str(i))
        mySpider.loadPage(i,cursor.lastrowid)
    # 关闭数据库连接
    db.close()
